package com.tianbao54.kotlin_01

/**
 * 延迟初始化属性，
 * Kotlin 要求非空类型属性必须在构造方法中进行初始化
 * 有时，这种要求不太方便，比如可以通过依赖注入和单元测试进行初始化属性赋值
 * 通过 lateinit 关键字标识为延迟初始化，需要满足3个条件
 * 1.lateinit 只能用在 var 属性上，不能在 primary constructor 中
 * 2.不能拥有自定义的 getter & setter 方法
 * 3.属性需要为非空，且不能有原生的数据类型
 */
class TheClass {

    lateinit var name: String

    fun init () {
        this.name = "lisi"
    }

    fun println () {
        println("name = ${this.name}")
    }
}

fun main(args: Array<String>) {

    var theClass = TheClass()
    theClass.init()
    theClass.println()
}